/*
ES2016 做了一点修改， 规定只要函数参数使用了默认值、 解构赋值、 或者扩展运算符， 那么函数内部就不能显式设定为严格模式， 否则会报错。
*/

// 报错
function doSomething(a, b = a) {
	'use strict';
	// code
}

// 报错
const doSomething = function({
	a,
	b
}) {
	'use strict';
	// code
};

// 报错
const doSomething = (...a) => {
	'use strict';
	// code
};

const obj = {
	// 报错
	doSomething({
		a,
		b
	}) {
		'use strict';
		// code
	}
};

/*
两种方法可以规避这种限制。第一种是设定全局性的严格模式，这是合法的。
第二种是把函数包在一个无参数的立即执行函数里面。
*/

'use strict';

function doSomething(a, b = a) {
	// code
}

const doSomething = (function() {
	'use strict';
	return function(value = 42) {
		return value;
	};
}());
